package com.study.dataStructure.tree;

import javax.management.RuntimeMBeanException;

/**
 * @author tiny
 * @date 2021/11/11 22:24
 * @Description:
 */
public class BinaryTree {

    private HeroNode root; //二叉树的根结点

    /**
     * 设置根结点
     * @param root
     */
    public void setRoot(HeroNode root){
        this.root = root;
    }

    /**
     * 前序遍历（根左右）
     */
    public void preList(){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return;
        }
        this.root.preList();
    }

    public HeroNode preSearch(int no){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return null;
        }
        return this.root.preSearch(no);
    }

    /**
     * 中序遍历 左根右
     */
    public void infixList(){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return;
        }
        this.root.infixList();
    }

    /**
     * 中序查找
     * @param no
     * @return
     */
    public HeroNode infixSearch(int no){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return null;
        }
        return this.root.infixSearch(no);
    }

    /**
     * 后序遍历 左右根
     */
    public void postList(){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return;
        }
        this.root.postList();
    }

    /**
     * 后序查找
     * @param no
     * @return
     */
    public HeroNode postSearch(int no){
        if(this.root==null){
            System.out.println("空树无法遍历");
            return null;
        }
        return this.root.postSearch(no);
    }

    /**
     * 删除结点
     */
    public HeroNode delNode(int no){
        HeroNode temp = this.root;
        if(temp==null) { //空树
            return null;
        }
        //先判断根结点是不是,heroNode的方法只能删除根的子节点
        if(temp.no == no){
            temp = null;
            return temp;
        }
        return temp.delNode(no);
    }

}
